import 'package:flutter/material.dart';
import 'package:flutter_grammar/pages/form.dart';
import 'package:flutter_grammar/pages/searchPage.dart';

import 'pages/tabs.dart';

/* 
Flutter中的路由通俗的讲就是页面跳转。在Flutter中通过Navigator组件管理路由导航。
并提供了管理堆栈的方法。如：Navigator.push和Navigator.pop
Flutter中给我们提供了两种配置路由跳转的方式：
1、基本路由 
 - Navigator.push() 方法进行路由跳转,也可以传参数  
   - 接收参数的方法：const SearchPage({super.key,  this.title = "search"});  可以给默认值 也可以给title设置required
   - 访问参数 widget.title   通过widget访问参数
 - Navigator.pop() 方法返回上一级
2、命名路由
  - 配置统一的路由表 routes
  - 在runApp函数里可以配置上默认路由 initialRoute
  - 配置onGenerateRoute 固定写法
  - 跳转路由和传值方式 Navigator.pushNamed(context, '/form',arguments: {"title": "this is params", "aid": 20});
  - 接收参数 widget.arguments
*/

void main() {
  //1、配置路由
  Map routes = {
    "/": (contxt) => const Tabs(),
    "/search": (contxt) => const SearchPage(),
    "/form": (contxt, {arguments}) => FormPage(arguments: arguments),
  };
  runApp(
      // 入口文件可以是自定义组件 也可以是flutter组件  //去掉debug图标
      MaterialApp(
    debugShowCheckedModeBanner: false,
    theme: ThemeData(
      primarySwatch: Colors.blue,
    ),
    // home: Tabs(),

    initialRoute: "/",
    //2、配置onGenerateRoute  固定写法
    onGenerateRoute: (RouteSettings settings) {
      // print(settings);
      // print(settings.name);
      // print(settings.arguments);

      final String? name = settings.name; 
      final Function? pageContentBuilder =
          routes[name]; 
      if (pageContentBuilder != null) {
        if (settings.arguments != null) {
          final Route route = MaterialPageRoute(
              builder: (context) =>
                  pageContentBuilder(context, arguments: settings.arguments));
          return route;
        } else {
          final Route route = MaterialPageRoute(
              builder: (context) => pageContentBuilder(context));

          return route;
        }
      }
      return null;
    },

    title: 'Flutter Demo',
  ));
}
